package com.library.admin.controller;

import com.library.admin.modules.userrole.vo.UserRoleVO;
import com.library.admin.modules.userrole.bo.UserRolePage;
import com.library.admin.modules.userrole.bo.UserRoleInsert;
import com.library.admin.modules.userrole.bo.UserRoleUpdate;
import com.library.admin.modules.userrole.service.UserRoleService;
import com.library.logging.annotation.LogSys;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.library.common.response.Result;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;

import java.util.List;
import java.util.Objects;


/**
 * @Author xyh
 * @Desc 用户和角色关联表(UserRole)表控制层
 * @Date 2023-10-02 15:09:36
 */

@RestController
@RequestMapping("userrole")
public class UserRoleController {

    @Resource
    private UserRoleService userRoleService;


    /**
     * 分页查询列表
     *
     * @return 数据
     */
    @LogSys(value = "用户和角色分页查询列表")
    @GetMapping("/list")
    public Result<IPage<UserRoleVO>> queryByPage(@Valid UserRolePage page) {
        return Result.success(userRoleService.queryByPage(page));
    }

    /**
     * 根据ID获取数据
     *
     * @return 单个用户和角色关联表数据
     */
    @LogSys(value = "单个用户和角色关联表数据")
    @PostMapping("/queryById/{id}")
    public Result<UserRoleVO> queryById(@PathVariable("id") Integer id) {
        return Result.success(userRoleService.queryById(id));
    }


    /**
     * 添加用户和角色关联表
     *
     * @return 新增用户和角色关联表数据
     */
    @LogSys(value = "新增用户和角色关联表数据")
    @PostMapping("insert/{userId}")
    public Result insert(@PathVariable Integer userId, @Valid @RequestBody UserRoleInsert param) {
        param.setUserId(userId);
        userRoleService.insert(param);
        return Result.success();
    }


    /**
     * 编辑用户和角色关联表
     *
     * @return 编辑用户和角色关联表数据
     */
    @LogSys(value = "编辑用户和角色关联表数据")
    @PutMapping("/update")
    public Result update(@Valid @RequestBody UserRoleUpdate param) {
        if (Objects.isNull(param.getId())) {
            return Result.error("ID不能为空");
        }
        userRoleService.update(param);
        return Result.success();
    }

    /**
     * 删除用户和角色关联表
     *
     * @return 删除用户和角色关联表数据
     */
    @LogSys(value = "删除用户和角色关联表数据")
    @DeleteMapping("/delete/{id}")
    public Result deleteById(@PathVariable("id") Integer id) {
        userRoleService.deleteById(id);
        return Result.success();
    }

    /**
     * 根据用户id查询相关角色信息
     * @param userId
     * @return
     */
    @LogSys(value = "根据用户id查询相关角色信息")
    @GetMapping(value = "getRoleIdsByUserId/{userId}")
    public Result getRelatedRoleIds(@PathVariable Integer userId) {
        List<Integer> roleIdsByUserId = userRoleService.getRoleIdsByUserId(userId);
        return Result.success(roleIdsByUserId);
    }
}
